package com.zhongwang.mms.module.buy.dao;

import com.zhongwang.mms.gen.entity.*;
import com.zhongwang.mms.module.buy.model.*;
import com.zhongwang.mms.module.purchase.model.VWProject;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Collection;
import java.util.Date;
import java.util.List;

/**
 * @Description: 提报计划 dao
 *
 * @Author: China.sgl
 * @Date: 2020/4/7 16:28
 */
@Repository
public interface ReportPlanDao {

    /**
     * 添加提报计划
     *
     * @param data ReportPlanModel
     */
    void insert(ReportPlanModel data);

    /**
     *@name: insertEntity
     *@description: 根据实体类插入数据
     *@param: [bReportPlan]
     *@returnType: void
     *@author: 徐一贺
     *@coddingDate: 2020/8/21 16:13
     *@version: v1.0
    **/
    void insertEntity(BReportPlan bReportPlan);

    /**
     * 修改提报计划
     *
     * @param reportPlan 提报计划
     * @return 行数
     */
    int update(BReportPlan reportPlan);

    /**
     * 根据ID修改数据状态
     *
     * @param id 主键
     * @param status 状态
     * @return 行数
     */
    int updateStatusById(@Param("id") Integer id, @Param("status") Integer status);

    /**
     * 根据ID修改单据状态，原始，拆分，已拆分
     *
     * @param rppId 主键
     * @param original 单据状态
     * @return 行数
     */
    int updateOriginalById(@Param("id") Integer rppId, @Param("original") Integer original);

    /**
     * 根据ID修改库存指定状态
     *
     * @param rppId 主键
     * @param status 状态
     * @return 行数
     */
    int updateIsFlagById(@Param("rppId") Integer rppId, @Param("status") Integer status);

    /**
     * 根据ID修改提报状态
     *
     * @param rppId 主键
     * @param status 状态
     * @return 行数
     */
    int updateUseStockById(@Param("rppId") Integer rppId, @Param("status") Integer status);

    /**
     * 根据ID修改指定状态和描述
     *
     * @param reportPlanModel 计划
     * @return 行数
     */
    int updateIsFlagAndAssignDescById(ReportPlanModel reportPlanModel);


    /**
     * 清空外购件串料标记表提报计划ID
     *
     * @param rppId 提报计划ID
     */
    void updatePchangeOrderRppId(Integer rppId);

    /**
     * 清空原料库串料标记表提报计划ID
     *
     * @param rppId 提报计划ID
     */
    void updateMchangeOrderRppId(Integer rppId);

    /**
     * 清空成品库串料标记表提报计划ID
     *
     * @param rppId 提报计划ID
     */
    void updateHchangeOrderRppId(Integer rppId);

    /**
     * 清空外购件库存划项目标记表提报计划ID
     *
     * @param rppId 提报计划ID
     */
    void updatePinventoryProjectMarkRppId(Integer rppId);

    /**
     * 清空原料库存划项目标记表提报计划ID
     *
     * @param rppId 提报计划ID
     */
    void updateMinventoryProjectMarkRppId(Integer rppId);

    /**
     * 清空成品库存划项目标记表提报计划ID
     *
     * @param rppId 提报计划ID
     */
    void updateHinventoryProjectMarkRppId(Integer rppId);

    /**
     * 设置外购件串料表提报计划ID
     *
     * @param rppId 提报计划ID
     * @param ids ids
     */
    void updatePchangeOrder(@Param("rppId") Integer rppId, @Param("ids") String ids);

    /**
     * 设置外购件库存划项目表提报计划ID
     *
     * @param rppId 提报计划ID
     * @param ids ids
     */
    void updatePinventoryProjectMark(@Param("rppId") Integer rppId, @Param("ids")  String ids);

    /**
     * 设置原料串料表提报计划ID
     *
     * @param rppId 提报计划ID
     * @param ids ids
     */
    void updateMchangeOrder(@Param("rppId") Integer rppId, @Param("ids")  String ids);

    /**
     * 设置原料库存划项目表提报计划ID
     *
     * @param rppId 提报计划ID
     * @param ids ids
     */
    void updateMinventoryProjectMark(@Param("rppId") Integer rppId, @Param("ids")  String ids);

    /**
     * 设置成品串料表提报计划ID
     *
     * @param rppId 提报计划ID
     * @param ids ids
     */
    void updateHchangeOrder(@Param("rppId") Integer rppId, @Param("ids")  String ids);

    /**
     * 设置成品库存划项目表提报计划ID
     *
     * @param rppId 提报计划ID
     * @param ids ids
     */
    void updateHinventoryProjectMark(@Param("rppId") Integer rppId, @Param("ids")  String ids);


    /**
     * 查询项目编号
     *
     * @param code code
     * @return ProjectModel
     */
    Project findProjectByCode(String code);

    /**
     * 查询计划员
     *
     * @param name 名称
     * @param status 状态
     * @return TEmploy
     */
    TEmploy findEmployByNameAndStatus(@Param("name") String name, @Param("status") Integer status);

    /**
     * 查询计划员列表
     *
     * @return list
     */
    List<TEmploy> findEmployByStatus(Integer status);

    /**
     * 根据ID和状态查询字典表
     *
     * @param id 主键
     * @param status 状态
     * @return TDictionary
     */
    TDictionary findDictionaryByIdAndStatus(@Param("id") Integer id, @Param("status") Integer status);

    /**
     * 根据类别查询字典数据
     *
     * @param type 类别
     * @param status 状态
     * @return list
     */
    List<TDictionary> findDictionaryByTypeAndStatus(@Param("type") Integer type, @Param("status") Integer status);


    /**
     * 提报计划导入功能 -> 按条件查询提报计划
     *
     * @param reportPlanModel 条件
     * @return list
     */
    List<ReportPlanModel> findReportPlanByQueryWithImport(ReportPlanModel reportPlanModel);

    /**
     * 提报计划编辑功能 -> 按条件查询提报计划
     *
     * @param reportPlanModel 条件
     * @return list
     */
    List<ReportPlanModel> findReportPlanByQueryWithEdit(ReportPlanModel reportPlanModel);
    /**
     * 提报计划编辑功能 -> 按条件查询批量修改提报计划
     *
     * @param reportPlanModel 条件
     * @return list
     */
    List<ReportPlanModel> findReportPlanBatchChangeListByQuery(ReportPlanModel reportPlanModel);
//    /**
//     * 提报计划编辑功能 -> 获取数据
//     *
//     * @param reportPlanModel 条件
//     * @return list
//     */
//    List<ReportPlanModel> getRppIsChangeStatusFlagCount(ReportPlanModel reportPlanModel);

    /**
     * 计划删除审核功能 -> 按条件查询提报计划
     *
     * @param reportPlanModel 条件
     * @return list
     */
    List<ReportPlanModel> findReportPlanByQueryWithDelCheck(ReportPlanModel reportPlanModel);


    /**
     * 查询提报计划是否存在
     *
     * @param reportPlanModel 条件
     * @return ReportPlanModel
     */
    int findExist(ReportPlanModel reportPlanModel);

    /***
     * 根据主键查询提报计划
     *
     * @param id 主键
     * @return ReportPlanModel
     */
    ReportPlanModel findReportPlanById(Integer id);

    /**
     * 根据条件查询提报计划拆分信息
     *
     * @param reportPlanModel 条件
     * @return list
     */
    List<ReportPlanModel> findReportPlanSplitInfoByQuery(ReportPlanModel reportPlanModel);

    /**
     * 根据条件查询库存标记列表
     *
     * @param stockMarkModel 条件
     * @return list
     */
    List<StockMarkModel> findMarkList(StockMarkModel stockMarkModel);

    /**
     * 根据ID查询提报计划指定信息
     *
     * @param id 提报计划主键
     * @return list
     */
    List<StockMarkModel> findAssignInfoById(Integer id);

//    /**
//     * 提报计划导出功能 -> 根据条件查询提报计划
//     *
//     * @param reportPlanModel 条件
//     * @return list
//     */
//    List<ExportReportPlanModel> findByQueryWithExport(ReportPlanModel reportPlanModel);

    /**
     * 根据主键查询提报计划
     *
     * @param rppId 主键
     * @return BReportPlan
     */
    BReportPlan getById(Integer rppId);

    /**
     * 根据采购计划ID查询提报计划变更记录
     *
     * @param sppId 采购计划ID
     * @return list
     */
    List<ReportPlanChangeModel> findChangeLogBySppId(Integer sppId);

    /**
     * 根据主键修改状态和采购计划ID
     *
     * @param status 状态
     * @param changeMark 变更状态
     * @param sppId 采购计划ID
     * @param rppId 提报计划主键
     * @return 行数
     */
    int updateStatusAndChangeMarkAndSppIdById(@Param("status") Integer status, @Param("changeMark") Integer changeMark, @Param("sppId") Integer sppId, @Param("rppId") Integer rppId);

    /**
     * 根据采购计划ID查询提报计划和提报计划变更信息
     *
     * @param id 采购计划ID
     * @return list
     */
    List<ReportPlanChangeModel> findPlanAndChangeLogBySppId(Integer id);

    /**
     * 根据采购计划ID查询提报计划数量
     *
     * @param sppId 采购计划ID
     * @return 数量
     */
    int getCountBySppId(Integer sppId);

    /**
     * 外购件指定列表
     *
     * @return list
     */
    List<ReportPlanModel> findOutAssignList();

    /**
     * 根据项目编号和物料描述修改rppId
     *
     * @param plan 提报计划
     */
    int updatePchangeOrderRppIdByDescAndCode(BReportPlan plan);

    /**
     * 根据项目编号和物料描述修改rppId
     *
     * @param plan 提报计划
     */
    int updatePInventoryProjectMarkRppIdByDescAndCode(BReportPlan plan);

    /**
     * 根据ID修改状态和提交时间
     * @param id 主键
     * @param status 状态
     * @param commitTime 提交时间
     * @return 行数
     */
    int updateStatusAndCommitTimeById(@Param("id") Integer id, @Param("status") Integer status, @Param("time") Date commitTime);

    /**
     * 根据ID修改状态和删除原因
     *
     * @param id 主键
     * @param status 状态
     * @param reason 原因
     * @return 行数
     */
    int updateStatusAndReasonById(@Param("id") Integer id, @Param("status") Integer status, @Param("reason") String reason);
    /**
     * 外购件串料信息，根据指定计划主键清空对应的计划ID值
     *
     * @param rppId 指定的计划主键
     * @return 行数
     */
    int clearRppIdByPChangeOrder(Integer rppId);
    /**
     * 外购件库存划项目信息，根据指定计划主键清空对应的计划ID值
     *
     * @param rppId 指定的计划主键
     * @return 行数
     */
    int clearRppIdByPInventoryProjectMark(Integer rppId);
    /**
     * 原料库串料信息，根据指定计划主键清空对应的计划ID值
     *
     * @param rppId 指定的计划主键
     * @return 行数
     */
    int clearRppIdByMChangeOrder(Integer rppId);
    /**
     * 原料库库存划项目信息，根据指定计划主键清空对应的计划ID值
     *
     * @param rppId 指定的计划主键
     * @return 行数
     */
    int clearRppIdByMInventoryProjectMark(Integer rppId);
    /**
     * 成品库库存划项目信息，根据指定计划主键清空对应的计划ID值
     *
     * @param rppId 指定的计划主键
     * @return 行数
     */
    int clearRppIdByHInventoryProjectMark(Integer rppId);
    /**
     * 清空提报计划指定标识列的值为0，指定物料描述为null
     *
     * @param rppId 指定的计划主键
     * @return 行数
     */
    int clearReportPlanAssign(Integer rppId);

    /**
     * 清除掉变更标识
     * @param id
     * @return
     */
    int clearRppChangeMarkBySppId(Integer id);

    /**
     *@name: findNotPostPlannerPlanList
     *@description: 获取为提交到计划员的提报计划列表
     *@param: [queryParam] 检索条件
     *@returnType: java.util.List<com.zhongwang.mms.module.buy.model.ReportPlanModel>
     *@author: 徐一贺
     *@coddingDate: 2020/8/8 14:05
     *@version: v1.0
    **/
    List<ReportPlanModel> findNotPostPlannerPlanList(ReportPlanModel queryParam);

    /**
     *@name: updatePlannerAndPlanNo
     *@description:  更新计划员 计划号 和 编辑状态
     *@param: [saveParam] 编辑信息
     *@returnType: int
     *@author: 徐一贺
     *@coddingDate: 2020/8/8 16:45
     *@version: v1.0
    **/
    int updatePlannerAndPlanNo(ReportPlanModel saveParam);

    /**
     *@name: editSubmit
     *@description:  批量提交
     *@param: [saveParam] 保存参数
     *@returnType: com.zhongwang.mms.common.JsonResult
     *@author: 徐一贺
     *@coddingDate: 2020/8/10 08:57
     *@version: v1.0
     **/
    int updateRppPostPlannerStatus(ReportPlanModel submitParam);

    /**
     *@name: createExportTempTable
     *@description: 创建临时表
     *@param: [exportParam]
     *@returnType: void
     *@author: 徐一贺
     *@coddingDate: 2020/8/10 12:58
     *@version: v1.0
    **/
    void createExportTempTable(ReportPlanModel exportParam);

    /**
     *@name: getTempTableDataCount
     *@description: 获取临时表数据行数
     *@param: [exportParam]
     *@returnType: void
     *@author: 徐一贺
     *@coddingDate: 2020/8/10 12:58
     *@version: v1.0
     **/
    Integer getTempTableDataCount(ReportPlanModel exportParam);

    /**
     *@name: selectExportTempTableData
     *@description: 分页获取临时表数据
     *@param: [exportParam]
     *@returnType: java.util.List<com.zhongwang.mms.module.buy.model.ExportReportPlanModel>
     *@author: 徐一贺
     *@coddingDate: 2020/8/10 13:54
     *@version: v1.0
    **/
    List<ExportReportPlanEditModel> selectExportTempTableData(ReportPlanModel exportParam);
    /**
     *@name: dropExportTempTable
     *@description: 删除临时表
     *@param: [tempTableName]
     *@returnType: void
     *@author: 徐一贺
     *@coddingDate: 2020/8/10 13:55
     *@version: v1.0
    **/
    void dropExportTempTable(String tempTableName);

    /**
     *@name: insertEditPlannerErrorLog
     *@description: 记录分配计划员时的错误日志
     *@param: [exportReportPlanEditLogModel]
     *@returnType: int
     *@author: 徐一贺
     *@coddingDate: 2020/8/11 8:50
     *@version: v1.0
    **/
    int insertEditPlannerErrorLog(ExportReportPlanEditLogModel exportReportPlanEditLogModel);

    /**
     *@name: createExportLogTempTable
     *@description: 创建错误日志临时表
     *@param: [exportReportPlanEditLogModel] 参数
     *@returnType: void 创建数据
     *@author: 徐一贺
     *@coddingDate: 2020/8/11 8:50
     *@version: v1.0
     **/
    void createExportLogTempTable(ExportReportPlanEditLogModel exportParam);
    /**
     *@name: getTempTableLogDataCount
     *@description:  获取数量
     *@param: [exportParam] 参数
     *@returnType: java.lang.Integer 数量
     *@author: 徐一贺
     *@coddingDate: 2020/8/11 9:56
     *@version: v1.0
    **/
    Integer getTempTableLogDataCount(ExportReportPlanEditLogModel exportParam);
    /**
     *@name: selectExportTempTableLogData
     *@description: 分页获取错误日志
     *@param: [exportParam] 分页参数
     *@returnType: java.util.List<com.zhongwang.mms.module.buy.model.ExportReportPlanEditLogModel>
     *@author: 徐一贺
     *@coddingDate: 2020/8/11 9:57
     *@version: v1.0
    **/
    List<ExportReportPlanEditLogModel> selectExportTempTableLogData(ExportReportPlanEditLogModel exportParam);

    /**
     *@name: createExportDeferralTempTable
     *@description: 根据条件导出表
     *@param: [reportPlanModel]
     *@returnType: void
     *@author: 徐一贺
     *@coddingDate: 2020/8/11 13:22
     *@version: v1.0
    **/
    void createExportDeferralTempTable(ReportPlanModel reportPlanModel);

    /**  createExportAssignDeferralTempTable 根据条件查询出导出的指定计划
     * @param reportPlanModel 检索参数
     * @author 徐一贺
     * @date 2020/12/2 8:54
     */
    void createExportAssignDeferralTempTable(ReportPlanModel reportPlanModel);

    /**
     *@name: selectExportDeferralTempTableData
     *@description: 获取暂缓列表
     *@param: [reportPlanModel]
     *@returnType: java.util.List<com.zhongwang.mms.module.buy.model.ExportDeferralModel>
     *@author: 徐一贺
     *@coddingDate: 2020/8/11 14:35
     *@version: v1.0
    **/
    List<ExportDeferralModel> selectExportDeferralTempTableData(ReportPlanModel reportPlanModel);
    /**
     *@name: selectExportAssignDeferralTempTableData
     *@description: 获取列表
     *@param: [reportPlanModel]
     *@returnType: java.util.List<com.zhongwang.mms.module.buy.model.ExportDeferralModel>
     *@author: 徐一贺
     *@coddingDate: 2020/8/11 14:35
     *@version: v1.0
    **/
    List<ExportAssignModel> selectExportAssignDeferralTempTableData(ReportPlanModel reportPlanModel);

    /**
     *@name: getReportPlanByRppResultId
     *@description: 根据rppResultId获取对应的计划
     *@param: [id]
     *@returnType: com.zhongwang.mms.module.buy.model.ReceiveReportPlanModel
     *@author: 徐一贺
     *@coddingDate: 2020/8/14 15:58
     *@version: v1.0
    **/
    List<ReceiveReportPlanModel> getReportPlanByRppResultId(Integer id);

    /**
     *@name: updateRppSplitPlanTypeById
     *@description: 根据主键更新拆分身份
     *@param: [rppId, old]
     *@returnType: void
     *@author: 徐一贺
     *@coddingDate: 2020/8/14 16:15
     *@version: v1.0
    **/
    void updateRppSplitPlanTypeById(@Param("rppId") Integer rppId, @Param("rppSplitPlanType") String rppSplitPlanType);

    /**
     *@name: getExportDeferralModelById
     *@description: 根据主键获取数据库中暂缓计划信息
     *@param: [rppId]
     *@returnType: com.zhongwang.mms.module.buy.model.ExportDeferralModel
     *@author: 徐一贺
     *@coddingDate: 2020/8/21 11:22
     *@version: v1.0
    **/
    ExportDeferralModel getExportDeferralModelById(Integer rppId);

    /**
     *@name: getBReportPlanByIdAndRppUseStock
     *@description: 根据父级ID和提报类型获取提报数量大于0的计划
     *@param: [rppId, i]
     *@returnType: com.zhongwang.mms.gen.entity.BReportPlan
     *@author: 徐一贺
     *@coddingDate: 2020/8/21 14:40
     *@version: v1.0
    **/
    BReportPlan getBReportPlanByIdAndRppUseStock(@Param("rppSrcId")Integer rppId, @Param("rppUseStock")Integer rppUseStock);

    /**
     *@name: updateBReportPlanRppNumAndRppChangeMarkByRppId
     *@description: 根据主键更新提报数量和变更标识
     *@param: [normal]
     *@returnType: void
     *@author: 徐一贺
     *@coddingDate: 2020/8/21 15:53
     *@version: v1.0
    **/
    void updateBReportPlanRppNumAndRppChangeMarkByRppId(BReportPlan normal);

    /**
     *@name: updateBReportPlanRppOriginalFlagAndRppSplitPlanTypeByRppId
     *@description: 根据主键更新拆分类别和拆分身份
     *@param: [rppId]
     *@returnType: void
     *@author: 徐一贺
     *@coddingDate: 2020/8/21 16:02
     *@version: v1.0
    **/
    void updateBReportPlanRppOriginalFlagAndRppSplitPlanTypeByRppId(BReportPlan bReportPlan);

    /**
     *@name: updateBReportPlanRppUseStockByRppId
     *@description: 根据主键更改提报类型
     *@param: [bReportPlan]
     *@returnType: void
     *@author: 徐一贺
     *@coddingDate: 2020/8/21 17:53
     *@version: v1.0
    **/
    void updateBReportPlanRppUseStockByRppId(BReportPlan bReportPlan);

    /**
     *@name: findBReportPlanByRppSrcId
     *@description: 根据RppSrcId获取数量大于0的提报计划列表
     *@param: [rppId]
     *@returnType: java.util.List<com.zhongwang.mms.gen.entity.BReportPlan>
     *@author: 徐一贺
     *@coddingDate: 2020/8/21 18:22
     *@version: v1.0
    **/
    List<BReportPlan> findBReportPlanByRppSrcId(Integer rppId);
    /**
     *@name: insertExportDeferralErrorLogModel
     *@description: 插入错误日志
     *@param: [errorLogModel]
     *@returnType: void
     *@author: 徐一贺
     *@coddingDate: 2020/8/22 11:28
     *@version: v1.0
    **/
    void insertExportDeferralErrorLogModel(ExportDeferralErrorLogModel errorLogModel);

    /**
     *@name: createDeferralErrorLogExportTempTable
     *@description: 创建临时表存储导出内容
     *@param: [reportPlanModel]
     *@returnType: void
     *@author: 徐一贺
     *@coddingDate: 2020/8/22 12:45
     *@version: v1.0
    **/
    void createDeferralErrorLogExportTempTable(ReportPlanModel reportPlanModel);
    /**
     *@name: selectDeferralErrorLogExportTempTableData
     *@description: 分页查询错误日志数据
     *@param: [reportPlanModel]
     *@returnType: java.util.List<com.zhongwang.mms.module.buy.model.ExportDeferralErrorLogModel>
     *@author: 徐一贺
     *@coddingDate: 2020/8/22 12:51
     *@version: v1.0
    **/
    List<ExportDeferralErrorLogModel> selectDeferralErrorLogExportTempTableData(ReportPlanModel reportPlanModel);

    /**
     *@name: getPInventoryForPurChangeByCeoId
     *@description: 根据计划ID获取串料库存的平均价，
     *如果遇到被指定的库存存在多条并且单价不同则采取平均价的方式获取。
     *平均价公式 被指定库存的串料数量 * 库存单价，将多个库存总价求和求和，
     *然后将求和结果除以指定库存的串料总数之和，得出单价。
     *@param: [ids]
     *@returnType: java.util.List<com.zhongwang.mms.gen.entity.PInventory>
     *@author: 徐一贺
     *@coddingDate: 2020/8/25 20:46
     *@version: v1.0
    **/
    Double getPInventoryPriceForPurChangeByCeoRppId(Integer rppId);

    /**
     *@name: updateBReportPlanRppAssignUseStockPrice
     *@description: 根据提报计划主键更新指定库存的单价和指定库存时间，
     *@param: [rppId, price, date]
     *@returnType: void
     *@author: 徐一贺
     *@coddingDate: 2020/8/26 8:21
     *@version: v1.0
    **/
    void updateBReportPlanRppAssignUseStockPrice(@Param("rppId") Integer rppId,@Param("price") Double price,@Param("date") Date date);
    /**
     *@name: getPInventoryForPurChangeByCeoId
     *@description: 根据计划ID获取库存划项目库存的平均价，
     *如果遇到被指定的库存存在多条并且单价不同则采取平均价的方式获取。
     *平均价公式 被指定库存的库存划项目数量 * 库存单价，将多个库存总价求和求和，
     *然后将求和结果除以指定库存的库存划项目总数之和，得出单价。
     *@param: [ids]
     *@returnType: java.util.List<com.zhongwang.mms.gen.entity.PInventory>
     *@author: 徐一贺
     *@coddingDate: 2020/8/25 20:46
     *@version: v1.0
     **/
    Double getPInventoryPriceForPInventoryProjectMarkByIpmRppId(Integer rppId);
    /**
     *@name: getPInventoryForPurChangeByCeoId
     *@description: 根据计划ID获取串料库存的平均价，
     *如果遇到被指定的库存存在多条并且单价不同则采取平均价的方式获取。
     *平均价公式 被指定库存的串料数量 * 库存单价，将多个库存总价求和求和，
     *然后将求和结果除以指定库存的串料总数之和，得出单价。
     *@param: [ids]
     *@returnType: java.util.List<com.zhongwang.mms.gen.entity.PInventory>
     *@author: 徐一贺
     *@coddingDate: 2020/8/25 20:46
     *@version: v1.0
     **/
    Double getMInventoryPriceForMatChangeByCeoRppId(Integer rppId);
    /**
     *@name: getPInventoryForPurChangeByCeoId
     *@description: 根据计划ID获取库存划项目库存的平均价，
     *如果遇到被指定的库存存在多条并且单价不同则采取平均价的方式获取。
     *平均价公式 被指定库存的库存划项目数量 * 库存单价，将多个库存总价求和求和，
     *然后将求和结果除以指定库存的库存划项目总数之和，得出单价。
     *@param: [ids]
     *@returnType: java.util.List<com.zhongwang.mms.gen.entity.PInventory>
     *@author: 徐一贺
     *@coddingDate: 2020/8/25 20:46
     *@version: v1.0
     **/
    Double getMInventoryPriceForMInventoryProjectMarkByIpmRppId(Integer rppId);
    /**
     *@name: getPInventoryForPurChangeByCeoId
     *@description: 根据计划ID获取串料库存的平均价，
     *如果遇到被指定的库存存在多条并且单价不同则采取平均价的方式获取。
     *平均价公式 被指定库存的串料数量 * 库存单价，将多个库存总价求和求和，
     *然后将求和结果除以指定库存的串料总数之和，得出单价。
     *@param: [ids]
     *@returnType: java.util.List<com.zhongwang.mms.gen.entity.PInventory>
     *@author: 徐一贺
     *@coddingDate: 2020/8/25 20:46
     *@version: v1.0
     **/
    Double getHInventoryPriceForHalfChangeByCeoRppId(Integer rppId);

    /**
     *@name: getPInventoryForPurChangeByCeoId
     *@description: 根据计划ID获取库存划项目库存的平均价，
     *如果遇到被指定的库存存在多条并且单价不同则采取平均价的方式获取。
     *平均价公式 被指定库存的库存划项目数量 * 库存单价，将多个库存总价求和求和，
     *然后将求和结果除以指定库存的库存划项目总数之和，得出单价。
     *@param: [ids]
     *@returnType: java.util.List<com.zhongwang.mms.gen.entity.PInventory>
     *@author: 徐一贺
     *@coddingDate: 2020/8/25 20:46
     *@version: v1.0
     **/
    Double getHInventoryPriceForHInventoryProjectMarkByIpmRppId(Integer rppId);
    /**
     * 根据ID修改指定状态和描述
     *
     * @param model 计划
     * @return 行数
     */
    int updateIsFlagAndAssignDesc2ById(ReportPlanModel model);

    /**
     *@name: updateBReportPlanRppExtendUrl
     *@description: 更新计划的上传文件路径
     *@param: [rppId, fileName]
     *@returnType: void
     *@author: 徐一贺
     *@coddingDate: 2020/8/31 14:08
     *@version: v1.0
    **/
    void updateBReportPlanRppExtendUrl(@Param("rppId") Integer rppId, @Param("rppExtendUrl")String fileName);
    /**
     *@name: updateBReportPlanRppRppPostPlannerStatus
     *@description: 根据主键设置发送到物控员状态为2
     *@param: [id]
     *@returnType: void
     *@author: 徐一贺
     *@coddingDate: 2020/9/1 13:32
     *@version: v1.0
    **/
    void updateBReportPlanRppRppPostPlannerStatus(Integer id);
    /**
     *@name: updateReportPlan
     *@description: 修改
     *@param: [after]
     *@returnType: int
     *@author: 徐一贺
     *@coddingDate: 2020/9/1 13:47
     *@version: v1.0
    **/
    int updateReportPlan(BReportPlan after);

    /**
     *@name: findRppAssistType
     *@description: 获取外协类型
     *@param: [rppAssistType]
     *@returnType: com.zhongwang.mms.gen.entity.VwDictCommon
     *@author: 徐一贺
     *@coddingDate: 2020/9/1 15:35
     *@version: v1.0
    **/
    VwDictCommon findRppAssistType(String rppAssistType);

    /**
     *@name: insertBReportPlanAddLog
     *@description: 插入补录记录
     *@param: [bReportPlanAddLog]
     *@returnType: void
     *@author: 徐一贺
     *@coddingDate: 2020/9/1 15:56
     *@version: v1.0
    **/
    void insertBReportPlanAddLog(BReportPlanAddLog bReportPlanAddLog);

    /**
     *@name: findBReportPlanBySppId
     *@description: 根据采购计划ID获取提报计划列表 用于合报
     *@param: [sppId]
     *@returnType: java.util.List<com.zhongwang.mms.gen.entity.BReportPlan>
     *@author: 徐一贺
     *@coddingDate: 2020/9/1 20:00
     *@version: v1.0
    **/
    List<BReportPlan> findBReportPlanBySppId(Integer sppId);

    /**
     *@name: getBReportPlanBySppId
     *@description: 根据采购计划ID获取提报计划
     *@param: [sppId]
     *@returnType: com.zhongwang.mms.gen.entity.BReportPlan
     *@author: 徐一贺
     *@coddingDate: 2020/9/1 20:00
     *@version: v1.0
     **/
    BReportPlan getBReportPlanBySppId(Integer sppId);

    /**
     *@name: updateBReportPlanRppBuyPriceAndRppConfirmReturnDateByRppId
     *@description: 依据主键更新确认回货单价和确认回货时间
     *@param: []
     *@returnType: void
     *@author: 徐一贺
     *@coddingDate: 2020/9/1 20:12
     *@version: v1.0
    **/
    void updateBReportPlanRppBuyPriceAndRppConfirmReturnDateByRppId(BReportPlan changeRppBuyPriceModel);
    /**
     *@name: findReportPlanDaoByRppAncestorsId
     *@description: 根据祖宗ID获取所有计划
     *@param: [rppId]
     *@returnType: java.util.List<com.zhongwang.mms.gen.entity.BReportPlan>
     *@author: 徐一贺
     *@coddingDate: 2020/9/2 8:49
     *@version: v1.0
    **/
    List<BReportPlan> findReportPlanDaoByRppAncestorsId(Integer rppId);

    /**
     *@name: findProjectFormVwByCode
     *@description: 根据项目号查找项目
     *@param: [code]
     *@returnType: com.zhongwang.mms.module.purchase.model.VWProject
     *@author: 徐一贺
     *@coddingDate: 2020/9/3 11:26
     *@version: v1.0
    **/
    VWProject findProjectFormVwByCode(String code);

    /**
     *@name: deletePlanByRppResultId
     *@description: 根据B表主键删除本地未提交到物控员的提报计划表数据
     *@param: [id]
     *@returnType: void
     *@author: 徐一贺
     *@coddingDate: 2020/9/3 20:47
     *@version: v1.0
    **/
    int deletePlanByRppResultId(Integer id);

    /**
     *@name: updateBReportPlanRppSapCodeAndRppBuyStockMatDesc
     *@description: 根据主键更新，采购回货的入库的SAP编码和入库单的物料描述
     *@param: [rppId, odaSapCode, odaMatDesc]
     *@returnType: int
     *@author: 徐一贺
     *@coddingDate: 2020/9/4 13:13
     *@version: v1.0
    **/
    int updateBReportPlanRppSapCodeAndRppBuyStockMatDesc(@Param("rppId") Integer rppId, @Param("sapCode")String odaSapCode, @Param("matDesc")String odaMatDesc);

    /**
     *@name: getPInventoryByRppId
     *@description: 根据提报计划ID获取串料表的需求库存主键通过需求库存主键获得库存信息
     *@param: [rppId]
     *@returnType: com.zhongwang.mms.gen.entity.PInventory
     *@author: 徐一贺
     *@coddingDate: 2020/9/4 13:56
     *@version: v1.0
    **/
    PInventory getPInventoryByRppId(Integer rppId);

    /**
     *@name: getPInventoryFromPInventoryProjectMarkByRppId
     *@description: 根据提报计划ID获取库存划项目表的需求库存主键通过需求库存主键获得库存信息
     *@param: [rppId]
     *@returnType: com.zhongwang.mms.gen.entity.PInventory
     *@author: 徐一贺
     *@coddingDate: 2020/9/4 13:56
     *@version: v1.0
     **/
    PInventory getPInventoryFromPInventoryProjectMarkByRppId(Integer rppId);
    /**
     *@name: getMInventoryForPChangeOradrByRppId
     *@description: 根据提报计划ID获取串料表的需求库存主键通过需求库存主键获得库存信息
     *@param: [rppId]
     *@returnType: com.zhongwang.mms.gen.entity.MInventory
     *@author: 徐一贺
     *@coddingDate: 2020年9月4日14:41:40
     *@version: v1.0
     **/
    MInventory getMInventoryForPChangeOrderByRppId(Integer rppId);
    /**
     *@name: getMMatDescByMatId
     *@description: 根据原料库存物料ID获取物料描述
     *@param: [rppId]
     *@returnType: com.zhongwang.mms.gen.entity.MInventory
     *@author: 徐一贺
     *@coddingDate: 2020年9月4日14:41:40
     *@version: v1.0
     **/
    String getMMatDescByMatId(Integer ityMatId);
    /**
     *@name: getMInventoryForMInventoryForMInventoryProjectMarkByRppId
     *@description: 根据提报计划ID获取库存划项目表的需求库存主键通过需求库存主键获得库存信息
     *@param: [rppId]
     *@returnType: com.zhongwang.mms.gen.entity.PInventory
     *@author: 徐一贺
     *@coddingDate: 2020年9月4日14:48:03
     *@version: v1.0
     **/
    MInventory getMInventoryForMInventoryForMInventoryProjectMarkByRppId(Integer rppId);
    /**
     *@name: getHInventoryForPChangeOradrByRppId
     *@description: 根据提报计划ID获取串料表的需求库存主键通过需求库存主键获得库存信息
     *@param: [rppId]
     *@returnType: com.zhongwang.mms.gen.entity.HInventory
     *@author: 徐一贺
     *@coddingDate: 2020/9/4 14:50
     *@version: v1.0
    **/
    HInventory getHInventoryForPChangeOradrByRppId(Integer rppId);

    /**
     *@name: getHInventoryForPChangeOradrByRppId
     *@description: 根据提报计划ID获取串料表的需求库存主键通过需求库存主键获得库存信息
     *@param: [rppId]
     *@returnType: com.zhongwang.mms.gen.entity.HInventory
     *@author: 徐一贺
     *@coddingDate: 2020/9/4 14:50
     *@version: v1.0
     **/
    HInventory getHInventoryForMInventoryProjectMarkByRppId(Integer rppId);

    /**
     * FindBReportPlanByRppResultIdAndSource
     * 根据RppResultId 和拆分身份获取计划列表
     * @param reportPlan
     * @return
     */
    List<BReportPlan> findBReportPlanByRppResultIdAndSource(BReportPlan reportPlan);

    /**
     *  根据才分状态和主键获取提报计划
     * @param id
     * @return
     */
    BReportPlan getReportPlanByRppResultIdAndSource(Integer id);

    /**
     * updateBReportPlanToDelete
     * 根据主键更新提报计划状态为删除，并且清除B表ID值
     * @param updateRppSatatus
     * @return
     */
    int updateBReportPlanToDelete(BReportPlan updateRppSatatus);

    /**********************************************
     * @title: updateBReportPlanRppRemarkSapCodeAndRppRemarkMatDesc
     * @description: 根据主键更新备注SAP物料编码，备注SAP物料描述
     * @param:
     * @return:
     * @author: 徐一贺
     * @date: 2020/10/12 9:35
     * @versron: ver 1.0
     **********************************************
     */
    int updateBReportPlanRppRemarkSapCodeAndRppRemarkMatDesc(BReportPlan normal);

    /**
     * @title: getReportPlanByPrimaryKey
     * @description: 根据主键获取提报计划
     * @param: [id]
     * @return: com.zhongwang.mms.gen.entity.BReportPlan
     * @author: 徐一贺
     * @date: 2020/10/22 15:13
     * @versron: ver 1.0
     */
    BReportPlan getReportPlanByPrimaryKey(Integer id);

    /**
     * @title: getTotalNumForPurChangeByCeoRppId
     * @description: 根据提报计划ID获取对应外购件总数量
     * @param: [rppId]
     * @return: java.lang.Double
     * @author: 徐一贺
     * @date: 2020/11/14 12:35
     * @versron: ver 1.0
     */
    Double getTotalNumForPurChangeByCeoRppId(Integer rppId);

    /**
     * @title: getUnitForPurChangeByCeoRppId
     * @description: 获取单位
     * @param: [rppId]
     * @return: java.lang.String
     * @author: 徐一贺
     * @date: 2020/11/14 12:39
     * @versron: ver 1.0
     */
    String getUnitForPurChangeByCeoRppId(Integer rppId);

    /**
     * @title: updateBReportPlanUseStockNumAndUnit
     * @description: 根据主键更新自动指定数量和单位
     * @param: [rppId, totalNum, unit]
     * @return: int
     * @author: 徐一贺
     * @date: 2020/11/14 12:47
     * @versron: ver 1.0
     */
    int updateBReportPlanUseStockNumAndUnit(@Param("rppId") Integer rppId,@Param("rppAutoAssignUseStockNum") Double totalNum,@Param("rppAutoAssignUseStockUnit")  String unit);

    /**
     * @title: getTotalNumForPInventoryProjectMarkByIpmRppId
     * @description: 根据提报计划ID获取库存划项目总数量
     * @param: [rppId]
     * @return: java.lang.Double
     * @author: 徐一贺
     * @date: 2020/11/14 12:50
     * @versron: ver 1.0
     */
    Double getTotalNumForPInventoryProjectMarkByIpmRppId(Integer rppId);

    /**
     * @title: getUnitForPInventoryProjectMarkByIpmRppId
     * @description: 根据提报计划ID获取库存划项目单位
     * @param: [rppId]
     * @return: java.lang.String
     * @author: 徐一贺
     * @date: 2020/11/14 12:53
     * @versron: ver 1.0
     */
    String getUnitForPInventoryProjectMarkByIpmRppId(Integer rppId);

    /**
     * @title: getTotalNumForMatChangeByCeoRppId
     * @description: 根据提报计划ID获取串料总重量
     * @param: [rppId]
     * @return: java.lang.Double
     * @author: 徐一贺
     * @date: 2020/11/14 12:58
     * @versron: ver 1.0
     */
    Double getTotalNumForMatChangeByCeoRppId(Integer rppId);

    /**
     * @title: getTotalNumForMInventoryProjectMarkByIpmRppId
     * @description: 根据提报计划主键获取原材料库存划项目总重量
     * @param: [rppId]
     * @return: java.lang.Double
     * @author: 徐一贺
     * @date: 2020/11/14 13:01
     * @versron: ver 1.0
     */
    Double getTotalNumForMInventoryProjectMarkByIpmRppId(Integer rppId);

    /**
     * @title: getTotalNumForHalfChangeByCeoRppId
     * @description: 根据提报计划主键获取成品库串料总数量
     * @param: [rppId]
     * @return: java.lang.Double
     * @author: 徐一贺
     * @date: 2020/11/14 13:23
     * @versron: ver 1.0
     */
    Double getTotalNumForHalfChangeByCeoRppId(Integer rppId);

    /**
     * @title: getUnitForHalfChangeByCeoRppId
     * @description: 根据提报计划主键获取成品库串料单位
     * @param: [rppId]
     * @return: java.lang.String
     * @author: 徐一贺
     * @date: 2020/11/14 13:28
     * @versron: ver 1.0
     */
    String getUnitForHalfChangeByCeoRppId(Integer rppId);

    /**
     * @title: getTotalNumForHInventoryProjectMarkByIpmRppId
     * @description: 根据提报计划主键获去库存划项目总数量
     * @param: [rppId]
     * @return: java.lang.Double
     * @author: 徐一贺
     * @date: 2020/11/14 13:29
     * @versron: ver 1.0
     */
    Double getTotalNumForHInventoryProjectMarkByIpmRppId(Integer rppId);

    /**
     * @title: getUnitForHInventoryProjectMarkByIpmRppId
     * @description: 根据提报计划主键获取成品库库存划项目单位
     * @param: [rppId]
     * @return: java.lang.String
     * @author: 徐一贺
     * @date: 2020/11/14 13:31
     * @versron: ver 1.0
     */
    String getUnitForHInventoryProjectMarkByIpmRppId(Integer rppId);

    /**
     * @title: clearReportPlanInfo
     * @description: 根据主键清空自动指定的信息
     * @param: [rppId]
     * @return: int
     * @author: 徐一贺
     * @date: 2020/11/16 19:59
     * @versron: ver 1.0
     */
    int clearReportPlanInfo(Integer rppId);

    /**  updateBReportPlanByPromaryKeySelective 根据主键选择性更新提报计划
     * @param entity 信息
     * @return int
     * @exception
     * @author 徐一贺
     * @date 2020/12/7 9:50
     */
    int updateBReportPlanByPrimaryKeySelective(BReportPlan entity);

    List<ExportRecPlanModel> queryReceivedSubmissionPlan(ReceiveReportPlanModel queryParam);
}
